A field programmable gate array (FPGA) is a programmable logic device that allows a user to design custom logic circuits for desired tasks. A user can create a program for a desired task, transfer the program to an FPGA, and use the programmed FPGA to execute the desired task. Certain FPGAs can be reprogrammable, and allow for flexibility when creating or testing device designs.
FPGAs typically include a memory to provide functions for logic gates for implementing the program. Several different types of memories may be used with an FPGA, including write-once and reprogrammable memories. Write-once memories include memories using fuse technologies, which destroy or establish a physical connection during writing, and therefore cannot be rewritten. Fuse technologies are non-volatile and retain their contents when power is removed from the FPGA, but must be discarded if a new or updated program is desired.
FPGAs may also use reprogrammable memories such as random access memories (RAMs) including static RAMs (SRAMs). SRAMs can be reprogrammed, but lose their contents when power is removed from the FPGA. Since SRAMs are volatile, FPGAs incorporating SRAMs must be booted whenever they are powered up to provide functions to the memories.
There are continued efforts to improve the implementation of FPGAs.